/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package general.util;

import java.util.ArrayList;
import java.util.List;
import jpa.controller.*;
import jpa.entity.*;

/**
 *
 * @author isaias
 */
public class EntitiesValidation {


    public static List<String> validateProduto(Produto produto) {
       List<String> erros = new ArrayList<String>();

         if (produto.getName() == null || produto.getName().isEmpty()) {
            erros.add("O campo nome do produto é obrigatório!");
        } else {
           produto.setName(StringUtil.toUpperCase(produto.getName()));

            Produto produtoBd = new ProdutoJpaController().findProdutoByName(produto.getName(), produto);
   
            if (produtoBd != null && !produtoBd.getId().equals(produto.getId())) {
                erros.add("O produto selecionada já está cadastrada no banco!");
            }

        }

        return erros;
    }
    
     public static List<String> validateEmpresa(Empresa empresa) {
       List<String> erros = new ArrayList<String>();

         if (empresa.getName() == null || empresa.getName().isEmpty()) {
            erros.add("O campo nome da empresa é obrigatório!");
         } else {
           empresa.setName(StringUtil.toUpperCase(empresa.getName()));

                Empresa empresaBd = new EmpresaJpaController().findEmpresaForName(empresa.getName());
   
            if (empresaBd != null && !empresaBd.getId().equals(empresa.getId())) {
                erros.add("A empresa selecionada já está cadastrada no banco!");
            }

         }
         
         if(empresa.getCidade() == null){
               erros.add("O campo cidade é obrigatório!");
         }

        return erros;
    }
    
    public static List<String> validateObra(Obra obra) {
       List<String> erros = new ArrayList<String>();

         if (obra.getName() == null || obra.getName().isEmpty()) {
            erros.add("O campo nome da obra é obrigatório!");
        } else {
           obra.setName(StringUtil.toUpperCase(obra.getName()));

            Obra obraBd = new ObraJpaController().findObraByName(obra.getName());

            if (obraBd != null && !obraBd.getId().equals(obra.getId())) {
                erros.add("A obra selecionada já está cadastrada no banco!");
            }

        }

        return erros;
    }

    public static List<String> validateFornecedor(Fornecedor fornecedor) {
        List<String> erros = new ArrayList<String>();

         if (fornecedor.getName() == null || fornecedor.getName().isEmpty()) {
            erros.add("O campo nome do fornecedor é obrigatório");
        } else {
           fornecedor.setName(StringUtil.toUpperCase(fornecedor.getName()));

            Fornecedor fornecedorBd = new FornecedorJpaController().findFornecedorForName(fornecedor.getName());

            if (fornecedorBd != null && !fornecedorBd.getId().equals(fornecedor.getId())) {
                erros.add("O fornecedor selecionado já está cadastrado no banco");
            }

        }

        return erros;
    }
    
    
     public static List<String> validateDetalhe(Detalhe detalhe) {
        List<String> erros = new ArrayList<String>();

         if (detalhe.getName() == null || detalhe.getName().isEmpty()) {
            erros.add("O campo nome do detalhe é obrigatório");
        } else {
             detalhe.setName(StringUtil.toUpperCase(detalhe.getName()));
             
             Detalhe detalheBd = new DetalheJpaController().findDetalheByName(detalhe.getName());
             
            if (detalheBd != null && !detalheBd.getId().equals(detalhe.getId())) {
                erros.add("O detalhe selecionado já está cadastrado no banco");
            }

        }

        return erros;
     }
    
    
     public static List<String> validateMarca(Marca marca) {
        List<String> erros = new ArrayList<String>();

         if (marca.getName() == null || marca.getName().isEmpty()) {
            erros.add("O campo nome da marca é obrigatório");
        } else {
             marca.setName(StringUtil.toUpperCase(marca.getName()));
             
             Marca marcaBd = new MarcaJpaController().findMarcaByName(marca.getName());
             
            if (marcaBd != null && !marcaBd.getId().equals(marca.getId())) {
                erros.add("A marca selecionada já está cadastrada no banco");
            }

        }

        return erros;
    }
    

      public static List<String> validateUser(User newUser, String confirmNewPassword) {
        List<String> erros = new ArrayList<String>();
         System.out.println(">>>>>>>> Validate User... UserSelected id: "+ newUser.getId());
        if (newUser.getLogin() == null || newUser.getLogin().isEmpty()) {
            erros.add("O campo login do usuário é obrigatório");
        } else {
            newUser.setLogin(newUser.getLogin().toUpperCase());

            if (newUser.getId() == null) {
                User user = new UserJpaController().findUserByLogin(newUser.getLogin(), null);
                if (user != null) {
                    erros.add("O login desejado já está em uso, verifique com o administrador ou escolha outro.");
                }
            }
        }

        if (StringUtil.isNullOrEmpty(newUser.getPassword())) {
            erros.add("O campo senha do usuário é obrigatório");
        } else {

            if (confirmNewPassword != null) {
                if (!newUser.getPassword().equals(confirmNewPassword)) {
                    erros.add("As senha não conferem");
                }
            }
        }

        if (newUser.getName() == null || newUser.getName().isEmpty()) {
            erros.add("O campo nome do usuário é obrigatório");
        } else {
            newUser.setName(newUser.getName().toUpperCase());
        }


        return erros;
    }

     public static List<String> validateAddProduto_Nota(Produto_Pedido pN) {
        List<String> erros = new ArrayList<String>();

         if(pN.getProduto() == null){
             erros.add("Escolha um produto!");
         }

         if(pN.getEtapa() == null){
             erros.add("Escolha uma etapa!");
         }

        return erros;
    }

    public static List<String> validateBank(Bank bank) {
        List<String> erros = new ArrayList<String>();

         if (bank.getName() == null || bank.getName().isEmpty()) {
            erros.add("O campo nome do banco é obrigatório");
         } else {
           bank.setName(StringUtil.toUpperCase(bank.getName()));

           Bank bankBd = new BankJpaController().findBankForName(bank.getName());


            if (bankBd != null && !bankBd.getId().equals(bank.getId())) {
                erros.add("O banco selecionado já está cadastrado!");
            }

         }

        return erros;
    }

    public static List<String> validateCargo(Cargo cargo){
        List<String> erros = new ArrayList<String>();
        
        if(cargo.getName() == null || cargo.getName().isEmpty()){
            erros.add("O campo nome do cargo é obrigatório!");
        }else{
            cargo.setName(StringUtil.toUpperCase(cargo.getName()));
            Cargo cargoBb = new CargoJpaController().findCargoForName(cargo.getName());
            
            if(cargoBb != null && !cargoBb.getId().equals(cargo.getId())){
                erros.add("O cargo selecionado já está cadastrado!");
            }   
        }
        return erros;
    }
    

    public static List<String> validateNotaFiscal(Nota nota){
        List<String> erros = new ArrayList<String>();

        try{

            if(!MyStringUtil.isNullOrEmpty(nota.getNumber())){
                Nota notaNumber = new NotaJpaController().findNotaForNumberAndFornecedor(nota.getNumber(), nota.getFornecedor());

                if(notaNumber != null){
                    erros.add("Já existe uma nota com esse numero, para esse fornecedor!");
                }
            }else{
                erros.add("O campo numero da nota é obrigatório!");
            }

             if(nota.getDataEmissao() == null){
                erros.add("A data de emissão deve ser preenchida!");
             }

            if(nota.getDataEntrega() == null){
                erros.add("O campo data de entrega é obrigatório!");
            }

            if(nota.getEmpresa() == null){
                erros.add("O campo empresa é obrigatório!");
            }

            if(nota.getFornecedor() == null){
                 erros.add("O campo fornecedor é obrigatório!");
            }

            if(nota.getTipoDocumento() == null){
                 erros.add("O campo tipo do documento é obrigatório!");
            }

            if(nota.getTipoMovimento() == null){
                 erros.add("O campo tipo de movimento é obrigatório!");
            }

        }catch(Exception ex){
              ex.printStackTrace();
              erros.add("Erros");
        }

       

        return erros;
    }

    public static List<String> validatePedido(Pedido pedido) {
        List<String> erros = new ArrayList<String>();

        try {
             Pedido pedidoNumber = new PedidoJpaController().findPedidoForNumber(MyDateUtil.getMinuteHourDaysMonthYearForPedido());

             if(pedidoNumber != null){
                 erros.add("Aconteceu um erro interno, por favor espere dois minutos e tente outra vez.\n Caso o problema persista contate o administrador.");
             }

        } catch (Exception e) {
            e.printStackTrace();
        }


         if (pedido.getEmpresa() == null) {
             erros.add("O campo empresa é obrigatório!");
         }

         if (pedido.getFornecedor() == null) {
             erros.add("O campo fornecedor é obrigatório!");
         }

         if (pedido.getObra() == null) {
             erros.add("O campo obra é obrigatório!");
         }

         if (pedido.getProdutos_pedido().isEmpty()) {
             erros.add("O pedido precisa de no minimo um item.");
         }

         if (pedido.getTipoPagamento() == null) {
             erros.add("O campo pagamento (forma de pagamento), precisa ser preenchido!");
         }

        return erros;
    }

}
